package Domein;

import java.util.ArrayList;

/**
 *
 * @author Tim
 */
public class Hand {

    private Deelname deelname;
    /**
     *
     */
    public ArrayList<Kaart> kaarten;
    /**
     *
     */
    public Double inzet;
    /**
     *
     */
    public boolean activeHand = true;
    /**
     *
     */
    public double WinstVersliesBedrag;
    /**
     *
     */
    public boolean verzekerd;
    /**
     *
     */
    public double verzekerSaldo;

    public boolean gewonnen;

    /**
     *
     * @param d
     * @param aantalKaarten
     * @throws java.lang.Exception
     */
    public Hand(Deelname d, int aantalKaarten) throws Exception {
        deelname = d;
        kaarten = new ArrayList<Kaart>();

        for (int k = 0; k < aantalKaarten; k++) {
            neemKaart();
        }
    }

    /**
     *
     * @param k
     */
    public void addKaarten(Kaart k) {
        kaarten.add(k);

    }

    /**
     *
     * @return
     */
    public String getKaarten() {

        int kaartNr = 0;
        int kaartAftrek = 0;
        String som ="";
        String waarde ="";

        for(Kaart k: kaarten){
            kaartNr++;
            switch(k.getValue()){
                case  1: waarde = "A"; break;
                case 11: waarde = "B"; break;
                case 12: waarde = "V"; break;
                case 13: waarde = "K"; break;
                default: waarde = ""+k.getValue(); break;
            }
            if((deelname instanceof Bank && kaarten.size() > 2 || kaartNr==1 ) || deelname instanceof SpelerDeelname){
                 som += waarde+" ";
            }
           
        }
        som +="="+(getTotaalwaarde()-kaartAftrek);
        return som;
    }

    /**
     *
     * @return
     */
    public int getTotaalwaarde(){
        int kaartNr = 0;
        int totaalwaarde = 0;
        for(Kaart k: kaarten){
            kaartNr++;
            if((kaartNr != 2 && deelname instanceof Bank && kaarten.size() == 2) || deelname instanceof SpelerDeelname || (deelname instanceof Bank && kaarten.size() > 2)){
                switch(k.getValue()) {
                    case 1:
                        if((totaalwaarde+11) > 21) {
                            totaalwaarde += 1;
                        } else {
                            totaalwaarde += 11;
                        }
                    break;
                    case 11:
                        totaalwaarde += 10;
                    break;
                    case 12:
                        totaalwaarde += 10;
                    break;
                    case 13:
                        totaalwaarde += 10;
                    break;
                    default:
                        totaalwaarde += k.getValue();
                    break;
                }
            }
        }
        return totaalwaarde;
    }

    /**
     *
     * @return
     */
    public double getRation() {
        return WinstVersliesBedrag;
    }

    /**
     *
     * @throws java.lang.Exception
     */
    public void split() throws Exception {
        deelname.addHand(1);
        deelname.handen.get(deelname.handen.size() - 1).addKaarten(kaarten.get(1));
        kaarten.remove(1);
        deelname.handen.get(deelname.handen.size() - 1).setInzet(inzet);

    }

    /**
     *
     * @param verzekerSaldo
     */
    public void verzekeren(double verzekerSaldo) {
        verzekerd = true;
        this.verzekerSaldo = verzekerSaldo;
        inzet += verzekerSaldo;
        ((SpelerDeelname)deelname).speler.saldo -= verzekerSaldo;
        ((SpelerDeelname)deelname).huidigeSaldo -= verzekerSaldo;
    }

    /**
     *
     * @return
     */
    public boolean isVerzekerd() {
        return verzekerd;
    }

    /**
     *
     */
    public void pas() {
        activeHand = false;
    }

    /**
     *
     * @throws java.lang.Exception
     */
    public void dubbelen() throws Exception {
        SpelerDeelname sd = (SpelerDeelname) deelname;
        sd.inzetten(inzet);
        inzet = inzet * 2;
        neemKaart();
        pas();
    }

    /**
     *
     * @throws java.lang.Exception
     */
    public void neemKaart() throws Exception {
        kaarten.add(deelname.spelronde.kaartstapel.neemKaart());
    }

    /**
     *
     * @param isactive
     */
    public void setActive(boolean isactive) {
        activeHand = isactive;
    }

    /**
     *
     * @param inzet
     */
    public void setInzet(double inzet) {
        this.inzet = inzet;
    }

    public boolean ingezet() {
        if(inzet == null) {
            return false;
        } else if(inzet == 0.0) {
            return false;
        } else {
            return true;
        }
    }
}
